package com.city.utils;

import com.aspose.words.Document;
import com.aspose.words.ImageSaveOptions;
import com.aspose.words.License;
import com.aspose.words.SaveFormat;
import com.city.domain.party.Details;
import com.city.domain.party.fileDomainVO;
import org.aspectj.weaver.ast.Test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
/**
 * @author  王宇
 * @date 2018/8/6
 * @description  Word转pdf工具类
 */
public class WordToPdfUtils {
    /**
     * 验证License
     * @return boolean
     */
    public static boolean getLicense() {
        boolean result = false;
        try {
            //license.xml
            //如果不知道应该放在哪个路径,就在控制台打印一下,然后去放就好啦
            //System.out.println(Test.class.getClassLoader().getResource("").getPath());
            InputStream is = Test.class.getClassLoader().getResourceAsStream("license.xml");
            License aposeLic = new License();
            aposeLic.setLicense(is);
            result = true;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }

       // 2.2对word进行转换操作
    /**
     * word转换
     * 全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
     * @param
     */
    public static fileDomainVO Conversion(fileDomainVO vo) {
        //默认失败
        vo.setStatus(Details.FailStatus);
        if (!getLicense()) { // 验证License 若不验证则转化出的pdf文档会有水印产生
            System.out.println("验证失败,会产生水印");
        }
        //创建一个doc对象
        Document doc =null;
        try {
            //统计时间
            long old = System.currentTimeMillis();
            //初始化定义
            File file =null;
            ImageSaveOptions iso = null;
            //输出流
            FileOutputStream os =null;
            //判断是否转换图片
            if(vo.getDetails().equals(Details.DocToJPEG)){
                iso = new ImageSaveOptions(SaveFormat.JPEG);
            }else{
                //file.mkdirs();
                //新建一个空白文档
                file = new File(vo.getOutputfile());
                //创建文件夹
                file.mkdirs();
                file = new File(vo.getOutputfile()+vo.getFileNameAfter());
                os = new FileOutputStream(file);
            }
            //getInputfile是将要被转化文档
            doc = new Document(vo.getInputfile());
            //全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
            //------------------------------------------逻辑判断
            //>>>>>>DocToPDF
            if(vo.getDetails().equals(Details.DocToPDF)){
                doc.save(os, SaveFormat.PDF);
            }//>>>>>>DocToDocx
            else if(vo.getDetails().equals(Details.DocToDocx)){
                doc.save(os, SaveFormat.DOCX);
            }//>>>>>>DocToTexT
            else if(vo.getDetails().equals(Details.DocToTexT)){
                doc.save(os, SaveFormat.TEXT);
            }//>>>>>>DocToXps
            else if(vo.getDetails().equals(Details.DocToXps)){
                doc.save(os, SaveFormat.XPS);
            }//>>>>>>HtmlToDoc
            else if(vo.getDetails().equals(Details.HtmlToDoc)){
                doc.save(os, SaveFormat.DOC);
            }//>>>>>>DocToJPEG
            else if(vo.getDetails().equals(Details.DocToJPEG)){
                //iso.setResolution(128);
                iso.setPrettyFormat(true);
                iso.setUseAntiAliasing(true);
                for (int i = 0; i < doc.getPageCount(); i++)
                {
                    iso.setPageIndex(i);
                    doc.save(vo.getOutputfile() + vo.getFileNameAfter() +"---"+(i+1)+ ".jpeg", iso);
                }
            }
            //------------------------------------------逻辑判断
            //统计时间
            long now = System.currentTimeMillis();
            //System.out.println("共耗时：" + ((now - old) / 1000.0) + "秒"+"文件保存在:" + vo.getOutputfile());
            //设置时间
            vo.setTimeConsuming((((now - old) / 1000.0)+"").trim());
            //成功
            vo.setStatus(Details.SuccessStatus);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return vo;
    }
}
